Restrict activity launch when caller is running in the background Test: atest BackgroundActivityLaunchTest#testBackgroundActivityBlockedInStartNextMatchingActivity Bug: 230492947 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e1edaa27ea2f6911977556c5bba876a2319d5e2d) Merged-In: Ic88dd1e79b867b44cdcd6fc86650f5de6ebcc23d Change-Id: Ic88dd1e79b867b44cdcd6fc86650f5de6ebcc23d 
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 6b65922..dd3a3c5 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java 
@@ -1412,7 +1412,12 @@    final long origId = Binder.clearCallingIdentity();  // TODO(b/64750076): Check if calling pid should really be -1. - final int res = getActivityStartController() + try { + if (options == null) { + options = new SafeActivityOptions(ActivityOptions.makeBasic()); + } + options.getOptions(r).setAvoidMoveToFront(); + final int res = getActivityStartController()  .obtainStarter(intent, "startNextMatchingActivity")  .setCaller(r.app.getThread())  .setResolvedType(r.resolvedType) @@ -1428,13 +1433,11 @@  .setRealCallingUid(r.launchedFromUid)  .setActivityOptions(options)  .execute(); - Binder.restoreCallingIdentity(origId); - - r.finishing = wasFinishing; - if (res != ActivityManager.START_SUCCESS) { - return false; + r.finishing = wasFinishing; + return res == ActivityManager.START_SUCCESS; + } finally { + Binder.restoreCallingIdentity(origId);  } - return true;  }  }